Technote 1124

New Sound Input Driver Features


ñ⁄éü

ïœçXÇÃîwåi

ïœçXì_

ïœçXì_Ç÷ÇÃÉXÉ}Å[ÉgÇ»ëŒèàï˚ñ@

ÉTÉìÉvÉãÉRÅ[Éh

ǪÇÃëºÇÃíçà”ÇΔÉRÉÅÉìÉg

óvñÒ
DZÇà TECHNOTE Ç≈ÇÕÅAMac OS 8.1 ÇΔÇΔLJDžì±ì¸Ç≥ÇÍÇΩÅAêVǵǢ PCI ÉTÉEÉìÉhì¸óÕÉhÉâÉCÉoÇÃäOïîÇÃêVã@î\ÇΔïœçXì_Çê‡ñæÇµÇ‹Ç∑ÅBDZÇÃÉhÉLÉÖÉÅÉìÉgÇÕÅAéÂÇ…ÉTÉEÉìÉhì¸óÕÅAèÍçáÇ…ÇÊǡǃÇÕÉTÉEÉìÉhèoóÕ (çƒê∂) ÇçsǧÉAÉvÉäÉPÅ[ÉVÉáÉìÇÃÉfÉxÉçÉbÉpÇëŒè€ÇΔǵǃǢNjÇ∑ÅBÉTÉEÉìÉhì¸óÕÉhÉâÉCÉoÇçÏê¨ÇµÇƒÇ¢ÇÈÉfÉxÉçÉbÉpLJÅADZÇà TECHNOTE Ç…àÍí ÇËñ⁄Çí ÇµÇƒÅADZǧǵÇΩïœçXì_Çé©ï™ÇÃÉhÉâÉCÉoÇ…îΩâfÇ≥ÇπÇÈÇ◊Ç´Ç©åüì¢ÇµÇƒÇ≠ÇæÇ≥Ç¢ÅB


ïœçXÇÃîwåi

ÉfÉxÉçÉbÉpÇ™ç°Ç‹Ç≈ãÅÇflǃǴÇΩÇÃÇÕÅAÇÊÇËë¨Ç≠ÅAÇÊÇËè_ìÓÇ≈ÇÊÇËóLâvÇ»ã@î\ÇéùǬÉTÉEÉìÉhì¸óÕÉhÉâÉCÉoÇ≈Ç∑ÅBêVǵǢ PCI ÉTÉEÉìÉhì¸óÕÉhÉâÉCÉoÇÕÅADZÇÃóvãÅÇ…âûǶÇÈÇΩÇflÇÃç≈èâÇÃÉXÉeÉbÉvÇ≈Ç∑ÅB

óvãÅÇà 1 ǬÇÕÅAò^âπÇÇÕÇ∂ÇflǃǩÇÁÉAÉvÉäÉPÅ[ÉVÉáÉìÇ™ò^âπÉfÅ[É^ÇÃç≈èâÇÃÉrÉbÉgÇéÊìæÇ∑ÇÈÇ‹Ç≈ÇÃë“Çøéûä‘ÇíZÇ≠Ç∑ÇÈDZÇΔÇ≈ǵÇΩÅB

Ç‹ÇΩÅAäÑÇËçûÇ›ÉoÉbÉtÉ@Ç 2 ÇÃêÆêîèÊDžǵǃÅAçÇë¨ÉtÅ[ÉäÉGïœä∑ǻǫÇÃÉAÉãÉSÉäÉYÉÄÇLJǡÇΔå¯ó¶ÇÊÇ≠çsÇ¢ÇΩÇ¢ÇΔǢǧóvãÅLJdžÇËNjǵÇΩÅB

ÉÜÅ[ÉUÇÃë§ÇÕÉVÉìÉvÉãÇ»ÉTÉEÉìÉhì¸óÕÇóvãÅǵǃǢNjǵÇΩÅBä˘ë∂ÉhÉâÉCÉoÇ≈ÇÕÅACD Çï∑Ç¢ÇΩÇËÅAÉRÉìÉsÉÖÅ[É^ÇÃÉ{ÉäÉÖÅ[ÉÄÇí≤êÆÇ∑ÇÈǻǫÇÃä»íPÇ»ÉIÅ[ÉfÉBÉIä÷òAÇÃçÏãΔÇ≈Ç≥ǶÅAMacintosh Çê›íËÇ∑ÇÈÇÃÇ™ìÔǵÇ∑ǨNjǵÇΩÅBÉAÉbÉvÉãÇÃÉTÉ|Å[ÉgïîàıÇÕÅAÉIÅ[ÉfÉBÉI CD Çï∑Ç≠DZÇΔÇ™Ç≈ǴǻǢÇΔǢǧÉÜÅ[ÉUÇÃìdòbÇéÛÇØÇÈDZÇΔÇ™ÇÊÇ≠džÇËNjǵÇΩÅBDZÇÃñ‚ëËLJÅAêVǵǢÉTÉEÉìÉhì¸óÕÉhÉâÉCÉoÇ…ÇÊǡǃëŒâûǵNjǵÇΩÅB

ç≈å„ÇÃïœçXì_ÇÕÅAÉTÉEÉìÉhì¸óÕÉhÉâÉCÉoÇÃÉCÉìÉ^ÉtÉFÅ[ÉX (siOptionsDialog) ÇÃçÌèúÇ≈ÅADZÇÍÇÕãZèpìIÇ»ñ Ç©ÇÁÇÃóvêøÇ≈Ç∑ÅBDZÇÍÇÕÅAÉTÉEÉìÉhì¸óÕÉhÉâÉCÉoÇïWèÄÉhÉâÉCÉoÇÃêßå¿ (ModalDialog ÇåƒÇŒÇ»Ç¢Ç»Ç«) Ç…ÇÊÇËåµñßDžǵÇΩÇ™ÇÌÇπÇÈÇΩÇflÇ≈Ç∑ÅB

íçà”ÅF
Sound Manager ÇÃÇ«ÇÃã@î\Ç™égópâ¬î\Ç©Çí≤Ç◊ÇÈÇΩÇflÇ…ÅAMac OS ÇÃÉoÅ[ÉWÉáÉìÇÃÉ`ÉFÉbÉNÇ…óäǡǃÇÕÇ¢ÇØÇ‹ÇπÇÒÅBDZÇÍÇÁÇÃïœçXÇïÅï’ìIǻLJÇÃÇΔǵǃÉ\Å[ÉXÉRÅ[ÉhÇÉAÉbÉvÉfÅ[ÉgǵǃÇ≠ÇæÇ≥Ç¢ÅBÉTÉEÉìÉhì¸óÕÉhÉâÉCÉoÇÃïœçXÇÕ Mac OS 8.1 ÇëŒè€Ç…çsÇÌÇÍNjǵÇΩÇ™ÅADZǧǵÇΩïœçXÇÕ Sound Manager ÉVÉXÉeÉÄã@î\ägí£ÇÃÉAÉbÉvÉfÅ[ÉgÇí Ç∂ǃÅAMac OS ÇÃà»ëOÇÃÉoÅ[ÉWÉáÉìDžLJìKópÇ≥ÇÍÇÈâ¬î\ê´Ç™Ç†ÇËÇ‹Ç∑ÅB


ïœçXì_

ë“Çøéûä‘ÇÃíZèk

LJǡÇΔLJëΩÇ¢óvãÅÇà 1 ǬÇÕÅAÉTÉEÉìÉhì¸óÕÇΔèoóÕ (çƒê∂) ÇÃäÑÇËçûÇ›ë“Çøéûä‘ÇÃíZèkÇ≈ǵÇΩÅBDZÇÃñ‚ëËÇÕÅAÉnÅ[ÉhÉEÉFÉAäÑÇËçûÇ›ÉoÉbÉtÉ@ÇÃÉTÉCÉYÇè¨Ç≥Ç≠Ç∑ÇÈDZÇΔÇ≈ëŒâûǵNjǵÇΩÅBâºëzÉÅÉÇÉä (VM) Ç™ÉIÉtÇÃèÍçáÇÕÅAà»ëOÇÕ 1056 ÉTÉìÉvÉãÇ≈ǵÇΩÇ™ÅAç°ÇÕ 512 ÉTÉìÉvÉãÇ…å∏ÇÁǵNjǵÇΩÅBVM Ç™ÉIÉìÇÃèÍçáÇÕ 4224 ÉTÉìÉvÉãÇ©ÇÁ 4096 ÉTÉìÉvÉãDžǵNjǵÇΩÅB

512 ÇΔǢǧêîílÇ™ëIÇŒÇÍÇΩóùóRÇÕ 2 ǬdžÇËÇ‹Ç∑ÅBÉoÉbÉtÉ@ÇÃÉTÉCÉYÇñÒ 50% è¨Ç≥Ç≠Ç∑ÇÈDZÇΔÇ≈ÅAäÑÇËçûÇ›ë“Çøéûä‘LJ 50% íZÇ≠Ç»ÇËNjǵÇΩÅBDZÇÍÇ≈ÉTÉEÉìÉhäÑÇËçûÇ›ÇÕǮǮÇÊǪ 22 É~ÉäïbÇ≤ÇΔÇ≈ÇÕÇ»Ç≠ÅA11 É~ÉäïbÇ≤ÇΔÇ…ãNDZÇÈÇÊǧDžǻÇËNjǵÇΩ (44.1KHz ÉTÉEÉìÉhÇÃèÍçá)ÅBDZÇÍÇ≈ÅAÉAÉvÉäÉPÅ[ÉVÉáÉìÇÕÇÊÇËè≠ǻǢë“Çøéûä‘Ç≈ò^âπÉfÅ[É^ÇéÛÇØéÊÇÍÇÈÇÊǧDžǻÇËÅAâπê∫ÇÃçƒê∂LJëÅÇ≠énÇflÇÈDZÇΔÇ™Ç≈Ç´ÇÈÇÊǧDžǻÇËNjǵÇΩÅB

ÉoÉbÉtÉ@ÉTÉCÉYÇ 512 ÉTÉìÉvÉãÇ…çÌå∏ǵÇΩ 2 ǬÇflÇÃóùóRÇÕÅA512 Ç™ 2 ÇÃêÆêîèÊÇ≈džÇÈDZÇΔÇ≈ÅAò^âπǵÇΩâπê∫ÇÉäÉAÉãÉ^ÉCÉÄÇ≈ï™êÕǵÇÊǧÇΔǵǃǢÇÈÉfÉxÉçÉbÉpÇ…ÇΔǡǃÅADZÇÍÇÕèdóvǻDZÇΔÇ≈Ç∑ÅBDZÇÃéÌÇÃï™êÕ (ǬNjÇËÅAçÇë¨ÉtÅ[ÉäÉGïœä∑) Ç…égópÇ∑ÇÈÉAÉãÉSÉäÉYÉÄÇ≈ÇÕÅAǵnjǵnj 2 ÇÃêÆêîèÊÇÃÉoÉbÉtÉ@Ç™ãÅÇflÇÁÇÍÇ‹Ç∑ÅBÉTÉEÉìÉhÉhÉâÉCÉoÇÃÉoÉbÉtÉ@ÉTÉCÉYÇDZÇÃÇÊǧDží≤êÆÇ∑ÇÈDZÇΔÇ≈ÅAÉfÉxÉçÉbÉpÇÕäÑÇËçûÇ›ÉRÅ[ÉãÉoÉbÉNì‡Ç≈ï°éGÇ»ÉfÅ[É^ÇÃÉoÉbÉtÉ@ÉäÉìÉOÇçsǧïKóvǙǻÇ≠Ç»ÇËÇ‹Ç∑ÅBsiHardwareFormat ÉZÉåÉNÉ^ÇégǡǃÅAçƒê∂ópÉnÅ[ÉhÉEÉFÉAÇÃÉoÉbÉtÉ@ÉTÉCÉYÇí≤Ç◊ÅAsiDeviceBufferInfo Ç≈ì¸óÕópÉnÅ[ÉhÉEÉFÉAÇÃÉoÉbÉtÉ@ÉTÉCÉYÇí≤Ç◊ǃÇ≠ÇæÇ≥Ç¢ÅB

ÉIÉvÉVÉáÉìÉ_ÉCÉAÉçÉOÇÃçÌèú

siOptionsDialog ÉZÉåÉNÉ^Ç™ PCI ÉTÉEÉìÉhì¸óÕÉhÉâÉCÉoÇ©ÇÁçÌèúÇ≥ÇÍNjǵÇΩÅBçÌèúÇ≥ÇÍÇΩÇÃÇÕÅAéüÇà 2 ǬÇÃóùóRÇ©ÇÁÇ≈Ç∑ÅB

  1. ÉhÉâÉCÉoÇÕÉÜÅ[ÉUÉCÉìÉ^ÉtÉFÅ[ÉXÇéùǬÇ◊Ç´Ç≈ÇÕdžÇËÇ‹ÇπÇÒ (é¿ç€ÅAÉlÉCÉeÉBÉuÉfÉoÉCÉXÉhÉâÉCÉo ('ndrv') ÇÕ ModalDialog ÇÃåƒÇ—èoǵǙÇ≈Ç´Ç‹ÇπÇÒ)ÅB
  2. É_ÉCÉAÉçÉOÇÕ Macintosh ÇÃÉÇÉfÉãÇ…ÇÊǡǃàÍä—ǵǃǢNjÇπÇÒÅB

ÉfÉxÉçÉbÉpÇÃǟǧǙ siOptionsDialog ÇÊÇËLJÇ∑ÇÆÇÍÇΩÉCÉìÉ^ÉtÉFÅ[ÉXÇíÒãüÇ≈Ç´ÇÈÇÕÇ∏ÇæÇΔä¥Ç∂ÇΩÇ©ÇÁÇ≈Ç∑ÅBÉfÉxÉçÉbÉpÇÕÅAé©ï™é©êgÇ≈çÏê¨Ç∑ÇÈDZÇΔLJÅAQuickTime Çà SequenceGrabber É_ÉCÉAÉçÉOÇégǧDZÇΔLJÇ≈Ç´Ç‹Ç∑ÅB

ì¸óÕÉ\Å[ÉXëIëÇÃêVǵǢï˚ñ@

ÉfÉxÉçÉbÉpÇÕÉTÉEÉìÉhì¸óÕÉ\Å[ÉXÇëIëÇ∑ÇÈìùàÍìIÇ»ï˚ñ@ÇãÅÇflǃǢNjǵÇΩÅBDZÇÍÇÕÅAsiOSTypeInputSource Ç®ÇÊÇ— siOSTypeInputAvailable ÉZÉåÉNÉ^Ç…ÇÊǡǃíBê¨Ç≥ÇÍNjǵÇΩÅBÉfÉxÉçÉbÉpÇÕÅAì¸óÕÉ\Å[ÉXÇDZÇÍÇ‹Ç≈ÇÃÇÊǧDžñºëO (ÉVÉXÉeÉÄÇ…ÇÊǡǃà·Ç¡ÇΩÇËÅAÉçÅ[ÉJÉâÉCÉYÇ≥ÇÍǃǵNjǧDZÇΔǙdžÇËÇ‹Ç∑) Ç≈ÇÕÇ»Ç≠ÅAïWèÄÇà OSType Ç…ÇÊǡǃëIëÇ≈Ç´ÇÈÇÊǧDžǻÇËNjǵÇΩÅB

ÇÊÇËÉVÉìÉvÉãÇ»ÉTÉEÉìÉhÉÇÉfÉã

Macintosh ÇÃÉTÉEÉìÉhÉÇÉfÉãÇÉVÉìÉvÉãÇ…Ç∑ÇÈDZÇΔÇ…çvå£ÇµÇΩLJǧǖÇΔǬÇÃïœçXì_ÇÕÅADZÇÍÇ‹Ç≈ï ÅXÇæÇ¡ÇΩÉwÉbÉhÉtÉHÉìÇΔì‡ïîÉXÉsÅ[ÉJÇÃâπó í≤êflÇ 1 ǬÇÃÉRÉìÉgÉçÅ[ÉãÇ…ìùçáǵÇΩDZÇΔÇ≈Ç∑ÅBÉwÉbÉhÉtÉHÉìÇÃâπó ÇÕì‡ïîÉXÉsÅ[ÉJÇÃâπó ÇΔÇÕï Ç…ê›íËÇ∑ÇÈDZÇΔÇ™Ç≈Ç´Ç»Ç≠Ç»ÇËNjǵÇΩ (ÉÜÅ[ÉUÇÕÅAÇ«ÇÃÉ{ÉäÉÖÅ[ÉÄÉXÉâÉCÉ_ÇégǡǃìKêÿÇ»âπó ÉåÉxÉãÇ…í≤êflÇ∑ÇÈÇÃÇ©ÅAç¨óêÇ∑ÇÈDZÇΔÇ™ëΩǩǡÇΩÇ©ÇÁÇ≈Ç∑)ÅBÇ‹ÇΩÅAÉwÉbÉhÉtÉHÉìëïíÖéûÇ…ì‡ïîÉXÉsÅ[ÉJÇÃñ≥âπèÛë‘Çí≤êflÇ∑ÇÈDZÇΔLJÇ≈Ç´Ç»Ç≠Ç»ÇËNjǵÇΩÅB


ïœçXì_Ç÷ÇÃÉXÉ}Å[ÉgÇ»ëŒèàï˚ñ@

ë“Çøéûä‘ÇÃíZèk

ÉhÉâÉCÉoÇÃì¸óÕÉoÉbÉtÉ@ÇÃïœçXÇÕâΩLJñ‚ëËÇãNDZÇ≥ǻǢÇÕÇ∏Ç≈Ç∑ÅBëÂëΩêîÇÃÉAÉvÉäÉPÅ[ÉVÉáÉìÇÕïœçXǙdžǡÇΩDZÇΔÇ…ãCÇ√ǩǻǢÇ≈ǵÇÂǧÅBè≠êîÇÃÅAäÑÇËçûÇ›ÉoÉbÉtÉ@ÉTÉCÉYÇ…àÀë∂Ç∑ÇÈÉAÉvÉäÉPÅ[ÉVÉáÉìÇÕÅAsiDeviceBufferInfo ÉZÉåÉNÉ^Ç≈ SPBGetDeviceInfo ÇåƒÇ—èoǵǃÅAäÑÇËçûÇ›ÉoÉbÉtÉ@ÇÃÉTÉCÉYÇéÊìæÇµÇƒÇ¢ÇÈÇÕÇ∏Ç≈Ç∑ÅBDZÇÍÇê≥ǵÇ≠çsǡǃǢÇÍÇŒÅAâΩLJïœçXÇπÇ∏Ç…êVǵǢÉoÉbÉtÉ@ÉTÉCÉYÇ≈ìÆçÏÇ∑ÇÈÇÕÇ∏Ç≈Ç∑ÅB

ÉIÉvÉVÉáÉìÉ_ÉCÉAÉçÉOÇÃçÌèú

siOptionsDialog ÉZÉåÉNÉ^Ç™çÌèúÇ≥ÇÍÇΩÇΩÇflÅAÉAÉvÉäÉPÅ[ÉVÉáÉìÉfÉxÉçÉbÉpÇÕÉTÉEÉìÉhì¸óÕÉhÉâÉCÉoÇÃò^âπèÛë‘ÇìKêÿÇ…ê›íËÇ∑ÇÈÇΩÇflÇÃÉCÉìÉ^ÉtÉFÅ[ÉXÇçÏê¨ÇµÇ»ÇØÇÍnjǻÇËÇ‹ÇπÇÒÅBÉfÉxÉçÉbÉpÇÕLJÇÕÇ‚ siOptionsDialog ÇåƒÇ—èoǵÇΩÇËÅAëºÇÃÉ\ÉtÉgÉEÉFÉAÇ™ÉTÉEÉìÉhì¸óÕÉhÉâÉCÉoÇê›íËǵǃÇ≠ÇÍÇÈDZÇΔÇ…àÀë∂Ç∑ÇÈDZÇΔÇ™Ç≈Ç´Ç»Ç≠Ç»ÇËNjǵÇΩÅB

ÉTÉEÉìÉhì¸óÕÉhÉâÉCÉoÇÃìKêÿÇ»ê›íËï˚ñ@DžǬǢǃÇÕÅAÇ≥NjǥNjǻç¨óêǙdžǡÇΩÇÊǧÇ≈Ç∑ÅBéüÇÃä»íPÇ»ãKë•ÇêSÇ…óØÇflǃÅAÉAÉvÉäÉPÅ[ÉVÉáÉìÇê›åvǵǃÇ≠ÇæÇ≥Ç¢ÅB

  1. ÉTÉEÉìÉhì¸óÕÉhÉâÉCÉoÇï¬Ç∂ÇΩå„LJê›íËÇ™écÇÈÇΔçlǶǃÇÕÇ¢ÇØÇ‹ÇπÇÒÅB
  2. ëºÇÃÉvÉçÉOÉâÉÄÇ™ÉTÉEÉìÉhì¸óÕÉ\Å[ÉXÇë„ÇÌÇËÇ…ê›íËǵǃÇ≠ÇÍÇÈÇΔçlǶǃÇÕÇ¢ÇØÇ‹ÇπÇÒÅB
  3. ëºÇÃÉvÉçÉOÉâÉÄÇ™çƒê∂ÉpÉâÉÅÅ[É^ (playthrough state) Çê›íËǵǃÇ≠ÇÍÇÈÇΔçlǶǃÇÕÇ¢ÇØÇ‹ÇπÇÒÅB
  4. ÉTÉEÉìÉhì¸óÕÉhÉâÉCÉoÇÃèÛë‘ÇâºíËǵǃÇÕÇ¢ÇØÇ‹ÇπÇÒÅB

DZÇÃä»íPÇ»ãKë•Ç©ÇÁÅAÉÜÅ[ÉUÇ™ÉÇÉjÉ^ÅïÉTÉEÉìÉhÉRÉìÉgÉçÅ[ÉãÉpÉlÉãÇ‹ÇΩÇÕÉTÉEÉìÉhÉRÉìÉgÉçÅ[ÉãÉpÉlÉãÇ≈Ç∑Ç≈Ç…ÉTÉEÉìÉhì¸óÕÉ\Å[ÉXÇê›íËǵǃǢÇÈÇΔçlǶǃÇÕÇ¢ÇØÇ»Ç¢Ç±ÇΔÇÕñæîíÇ≈Ç∑ÅBç≈èâÇà 3 ǬÇÃÉãÅ[ÉãÇîjǡǃǵNjǧDZÇΔÇ…Ç»ÇÈÇ©ÇÁÇ≈Ç∑ÅB

ÉTÉEÉìÉhì¸óÕÉhÉâÉCÉoÇê›íËÇ∑ÇÈê≥ǵǢï˚ñ@ÇÕÅAé©ï™Ç≈çÏê¨ÇµÇΩÉCÉìÉ^ÉtÉFÅ[ÉXÇ©ÅAQuickTime Çà SequenceGrabber ÉCÉìÉ^ÉtÉFÅ[ÉXÇÉÜÅ[ÉUÇ…íÒé¶Ç∑ÇÈDZÇΔÇ≈Ç∑ÅBÉCÉìÉ^ÉtÉFÅ[ÉXÇ≈ç≈í·å¿ïKóvÇ»ÇÃÇÕÅAÉÜÅ[ÉUÇ™äÛñ]ÇÃÉTÉEÉìÉhì¸óÕÉ\Å[ÉXÇΔçƒê∂ÉpÉâÉÅÅ[É^ÇëIëÇ≈Ç´ÇÈDZÇΔÇ≈Ç∑ÅBì¸óÕÉ\Å[ÉXÇΔçƒê∂ÉpÉâÉÅÅ[É^ (ÉTÉìÉvÉãÉåÅ[ÉgÅAÉTÉìÉvÉãÉTÉCÉYÅAÉ`ÉÉÉlÉãêîǻǫ) Ç™ê›íËÇ≥ÇÍÇΩÇÁÅAì¸óÕÉhÉâÉCÉoÇï¬Ç∂ǃÇÕÇ¢ÇØÇ‹ÇπÇÒÅBÉhÉâÉCÉoÇäJÇ´íºÇµÇΩÇΔÇ´Ç…ÅAÉÜÅ[ÉUǙdžǻÇΩÇÃÉvÉçÉOÉâÉÄÇégǡǃê›íËǵÇΩNjNjDžǻǡǃǢÇÈÇΔǢǧï€èÿǙǻǢǩÇÁÇ≈Ç∑ÅBì¸óÕÉhÉâÉCÉoÇï¬Ç∂ÇÈïKóvǙdžÇÈèÍçáÇÕÅAäJÇ´íºÇµÇΩÇΔÇ´Ç…å≥ÇÃéwíËí ÇËÇ…ê›íËǵíºÇµÇƒÇ≠ÇæÇ≥Ç¢ÅB

ì¸óÕÉ\Å[ÉXëIëÇÃêVǵǢï˚ñ@

ÉAÉvÉäÉPÅ[ÉVÉáÉìÇÃçÏê¨é“Ç™ä»íPÇ…ê≥ǵǢì¸óÕÉ\Å[ÉXÇëIëÇ≈Ç´ÇÈÇÊǧDžÅAêVǵǢ PCI ÉTÉEÉìÉhì¸óÕÉhÉâÉCÉoÇ…ÇÕ 2 ǬÇÃêVǵǢÉZÉåÉNÉ^Ç™í«â¡Ç≥ÇÍÅAOSType Ç≈ì¸óÕÉ\Å[ÉXÇ™ëIëÇ≈Ç´ÇÈÇÊǧDžǻÇËNjǵÇΩÅB

 * siOSTypeInputSource = FOUR_CHAR_CODE('inpt')
   * siOSTypeInputAvailable = FOUR_CHAR_CODE('inav')

siOSTypeInputSource ÉZÉåÉNÉ^ÇégǧÇΔÅAì¸óÕÉ\Å[ÉXî‘çÜÇ≈Ç»Ç≠ OSType ÇìnÇ∑DZÇΔÇ≈ÅAì¸óÕÉ\Å[ÉXÇê›íËÇ∑ÇÈDZÇΔÇ™Ç≈Ç´Ç‹Ç∑ÅBDZÇÍÇÕÅAäOïîÉ}ÉCÉNǻǫÅAìØÇ∂ì¸óÕÉ\Å[ÉXÇ≈LJã@éÌÇ…ÇÊǡǃëSÇ≠à·Ç§É\Å[ÉXî‘çÜDžǻǡǃǢÇÈÇΔǢǧåªé¿ÇçlǶÇÈÇΔÅAîÒèÌÇ…ï÷óòÇ≈Ç∑ÅBsiOSTypeInputSource ÉZÉåÉNÉ^Ç…éwíËÇ≈Ç´ÇÈì¸óÕÉ\Å[ÉXÇÃíËêîÇÕéüÇÃÇΔÇ®ÇËÇ≈Ç∑ (Universal Headers 3.1 Ç©ÇÁ)ÅB

enum {
    kNoSource               = FOUR_CHAR_CODE('none'),
    kCDSource               = FOUR_CHAR_CODE('cd  '),
    kExtMicSource           = FOUR_CHAR_CODE('emic'),
    kRCAInSource            = FOUR_CHAR_CODE('irca'),
    kTVFMTunerSource        = FOUR_CHAR_CODE('tvfm'),
    kDAVInSource            = FOUR_CHAR_CODE('idav'),
    kIntMicSource           = FOUR_CHAR_CODE('imic'),
    kMediaBaySource         = FOUR_CHAR_CODE('mbay'),
    kModemSource            = FOUR_CHAR_CODE('modm'),
    kZoomVideoSource        = FOUR_CHAR_CODE('zvpc')
};


siOSTypeInputSource ÉZÉåÉNÉ^ÇÕ SPBSetDeviceInfo ÇΔ SPBGetDeviceInfo ÇÃóºï˚Ç≈égópÇ≈Ç´Ç‹Ç∑Ç™ÅAsiOSTypeInputAvailable ÇÕÅASPBGetDeviceInfo Ç≈ǵǩégǶNjÇπÇÒÅBå„é“ÇÕåªç›Çà Macintosh Ç≈égópÇ≈Ç´ÇÈ OSType ÉZÉåÉNÉ^ÇÉäÉXÉgÇ≈ï‘Ç∑Ç©ÇÁÇ≈Ç∑ÅB

siOSTypeInputSource Ç®ÇÊÇ— siOSTypeInputAvailable ÉZÉåÉNÉ^ÇÃégópñ@ÇÃè⁄ç◊DžǬǢǃÇÕÅAâ∫ãLÇÃÉTÉìÉvÉãÉRÅ[ÉhÇΔÅuQ&A SND12ÅvÇéQèΔǵǃÇ≠ÇæÇ≥Ç¢ÅB

DZÇÍÇÁÇÃÉZÉåÉNÉ^ÇÕÅAdžÇÁÇ©Ç∂Çfl Sound Manager Ç‚ Sound Input Manager ÇÃÉoÅ[ÉWÉáÉìÉ`ÉFÉbÉNÇçsÇÌÇ∏Ç…égǶNjÇ∑ÅBÉZÉåÉNÉ^ÇégǮǧÇΔǵǃÉGÉâÅ[Ç™ï‘ǡǃǴÇΩèÍçáÇÕÅAǪÇÃÉTÉEÉìÉhì¸óÕÉhÉâÉCÉoÇÕêVǵǢÉZÉåÉNÉ^ÇÉTÉ|Å[ÉgǵǃǢǻǢDZÇΔÇ™ÇÌÇ©ÇÈÇÃÇ≈ÅAǪÇÃèÍçáÇÕè]óàÇÃï˚ñ@Ç≈ÉTÉEÉìÉhì¸óÕÉ\Å[ÉXÇê›íËÇ∑ÇÈïKóvǙdžÇËÇ‹Ç∑ (É_ÉCÉAÉçÉOÇï\é¶ÇµÇƒÉÜÅ[ÉUÇ…ì¸óÕÉ\Å[ÉXÇëIëǵǃLJÇÁǧǻǫ)ÅB

ÇÊÇËÉVÉìÉvÉãÇ»ÉTÉEÉìÉhÉÇÉfÉã

ÉwÉbÉhÉtÉHÉìÇΔì‡ïîÉXÉsÅ[ÉJÇÃå¬ï ÇÃâπó í≤êflÇÇ≈Ç´Ç»Ç≠ǵÇΩÇÃÇÕÅAâΔíÎópÉXÉeÉåÉIǻǫÇÃëºÇÃÉIÅ[ÉfÉBÉIÉnÅ[ÉhÉEÉFÉAÇ…ãflÇ¢ÉCÉìÉ^ÉtÉFÅ[ÉXÇÉÜÅ[ÉUÇ…íÒãüÇ∑ÇÈÇΩÇflÇ≈Ç∑ÅBDZÇÃÉIÅ[ÉfÉBÉIÉÇÉfÉãÇ≈ÇÕÅAÉwÉbÉhÉtÉHÉìÇÇ¬Ç»ÇÆÇΔÅAÉÅÉCÉìÉÜÉjÉbÉgÇÃÉXÉsÅ[ÉJÇÕÉIÉtÇ…Ç»ÇËÅAâπó í≤êflǬNjǛÇÇ‹ÇÌÇ∑ÇΔç°ìxÇÕÉwÉbÉhÉtÉHÉìÇÃâπó Ç™ïœâªÇµÇ‹Ç∑ÅBDZÇÍÇÕÅAÉèÉìÉ{É^ÉìÉ}ÉEÉXÇÃÇÊǧDžÉVÉìÉvÉãÇ»äTîOÇ≈Ç∑ÅBâπó í≤êflǬNjǛǙ 1 Ç¬ÇµÇ©Ç»ÇØÇÍÇŒÅAÇ«ÇÍÇégǧÇÃÇ©ñ¿Ç§Ç±ÇΔÇÕdžÇËÇ‹ÇπÇÒÅBì‡ïîÉXÉsÅ[ÉJÇÃâπó Ç…çÏópÇ∑ÇÈ API åƒÇ—èoǵÇÕèÌÇ…ÉwÉbÉhÉtÉHÉìÇÃâπó ÇLJê›íËǵÅAǪÇÃîΩëŒÇ‡ìØÇ∂Ç≈Ç∑ÅBâπó Çï ÅXÇ…í≤êÆÇ∑ÇÈï˚ñ@ÇÕdžÇËÇ‹ÇπÇÒÅBǪÇÃã@î\ÇÕçÌèúÇ≥ÇÍNjǵÇΩÅB

DZÇÃÉTÉEÉìÉhÉÇÉfÉãÇÕÅAÉwÉbÉhÉtÉHÉìÇΔì‡ïîÉXÉsÅ[ÉJÇìØéûDžǵǩâπó í≤êflÇ≈ǴǻǢ Macintosh Ç‚ÅAÉwÉbÉhÉtÉHÉìÇ™ê⁄ë±Ç≥ÇÍÇÈÇΔì‡ïîÉXÉsÅ[ÉJÇÃê⁄ë±Ç™êÿÇÍÇÈ Macintosh DžLJäYìñǵNjÇ∑ÅB

ÉTÉìÉvÉãÉRÅ[Éh

éüÇÃÉTÉìÉvÉãÉRÅ[ÉhÇÕÅAsiOSTypeInputAvailable Ç©ÇÁï‘Ç≥ÇÍÇΩ OSType îzóÒÇ÷ÇÃÉAÉNÉZÉXï˚ñ@Çé¶Ç∑LJÇÃÇ≈Ç∑ÅB

OSErr GetSoundInputSourceNames (long siRefNum, Handle *sourceNames) {
    OSErr                   err;
    long                    offset;
    short                   numNames;
    int                     i;
    char                    sourceName[255];
    // siInputSourceNames ÇÕéüÇÃç\ë¢ëÃÇï‘ǵNjÇ∑
    //  struct {
    //      short   numNames;
    //      PString names[numNames];
    //  };
    if (sourceNames != nil) {
        err = SPBGetDeviceInfo (siRefNum, siInputSourceNames, sourceNames);
    }
#if DEBUG
    if (err == noErr) {
        printf ("\nThe sound input source names are:\n");
        numNames = (*(short**)sourceNames)[0];

        offset = 3;
        for (i = 0; i < numNames; i++) {
            BlockMoveData (&((char*)(*sourceNames))[offset],
            sourceName, (*(char**)sourceNames)[offset-1]);
            sourceName[(*(char**)sourceNames)[offset-1]] = 0;
            printf ("  %s\n", sourceName);
            offset += (*(char**)sourceNames)[offset-1] + 1;
        }
    }
#endif
    return err;
}


éüÇÃÉTÉìÉvÉãÉRÅ[ÉhÇÕÅAÉTÉEÉìÉhì¸óÕÉIÉvÉVÉáÉìÉ_ÉCÉAÉçÉOÇçÏê¨Ç∑ÇÈÇΩÇflÇÃäÓñ{ìIÇ»ÉeÉNÉjÉbÉNÇé¶ÇµÇΩLJÇÃÇ≈Ç∑ÅBÇ‹Ç∏ÅAÉTÉEÉìÉhì¸óÕÉ\Å[ÉXñºÇÃÉäÉXÉgÇéÊìæÇµÅAǪÇÃÉäÉXÉgÇ©ÇÁÉÅÉjÉÖÅ[ (DZÇÃèÍçáÇÕÉ|ÉbÉvÉAÉbÉvÉÅÉjÉÖÅ[) ÇçÏê¨ÇµÅAǪÇÃÉÅÉjÉÖÅ[ÇÉ_ÉCÉAÉçÉOÇ…ë}ì¸ÇµÇƒÅAǪÇÃÉ_ÉCÉAÉçÉOÇï\é¶ÇµÇ‹Ç∑ÅBǪÇÃÉ_ÉCÉAÉçÉOÉ{ÉbÉNÉXÇ™è¡Ç¶ÇΩÇΔDZÇÎÇ≈ÅAÉÜÅ[ÉUÇ™ÉLÉÉÉìÉZÉãÇµÇƒÇ¢Ç»ÇØÇÍÇŒÅAGetControlValue ÇégǡǃÉÜÅ[ÉUǙǫÇÃÉÅÉjÉÖÅ[çÄñ⁄ÇëIëǵÇΩÇ©Çí≤Ç◊ÅAsiInputSource ÉZÉåÉNÉ^Ç≈ǪÇÃílÇìnǵǃÅAÉTÉEÉìÉhì¸óÕÉhÉâÉCÉoDžǪÇÃì¸óÕÉ\Å[ÉXÇégópÇ≥ÇπÇ‹Ç∑ÅBÉÅÉjÉÖÅ[ì‡ÇÃílÇÉ}ÉbÉsÉìÉOǵíºÇ∑ïKóvÇÕdžÇËÇ‹ÇπÇÒÅBÉTÉEÉìÉhì¸óÕÉhÉâÉCÉoÇÕÅAsiInputSource Ç™ì¸óÕÉ\Å[ÉXÇëIëÇ∑ÇÈéûÇΔìØÇ∂èáèòÇ≈ñºëOÇÃÉäÉXÉgÇï‘Ç∑Ç©ÇÁÇ≈Ç∑ÅB

#define kSourceNamesMenu        3
#define kPlayThruCheckBox       4
OSErr    DoSoundInputConfig (long soundInputDevice) {
    OSErr                   err                 = noErr;
    Rect                    box;
    Handle                  sourceNames;
    MenuHandle              namesMenu;
    ControlHandle           control;
    DialogPtr               optionsDialog;
    long                    offset,
                            i;
    short                   type,
                            inputSource,
                            itemHit,
                            playThruState;
    Boolean                 done                = false;

    err = GetSoundInputSourceNames (soundInputDevice, &sourceNames);

    namesMenu = NewMenu (kNamesMenu, nil);

    if (namesMenu != nil) {
        offset = sizeof (short);    // å¬êîÇÃÉtÉBÅ[ÉãÉhÇÕîÚÇŒÇ∑
        for (i = 0; i < (*(short**)sourceNames)[0]; i++) {
            AppendMenu (namesMenu, &((unsigned char*)(*sourceNames))[offset]);
            offset += (*(char**)sourceNames)[offset] + 1;
        }

        InsertMenu (namesMenu, hierMenu);

        optionsDialog = GetNewDialog (kOptionsDialog, nil, (WindowPtr)-1L);

        GetDialogItem (optionsDialog, kSourceNamesMenu, &type, &
                      (Handle)control, &box);
        err = SPBGetDeviceInfo (soundInputDevice, siInputSource, &inputSource);
        SetControlValue (control, inputSource);

        GetDialogItem (optionsDialog, kPlayThruCheckBox, &type, &
                      (Handle)control, &box);
        err = SPBGetDeviceInfo (soundInputDevice, siPlayThruOnOff, &playThruState);
        if (playThruState 1)
            playThruState = 1;
        SetControlValue (control, playThruState);

        SetDialogDefaultItem (optionsDialog, ok);
        ShowWindow (optionsDialog);

        while (done == false) {
            ModalDialog (nil, &itemHit);

            switch (itemHit) {
                case ok:
                    err = noErr;
                    done = true;
                    break;
                case cancel:
                    err = userCanceledErr;
                    done = true;
                    break;
                case kPlayThruCheckBox:
                    type = chkCtrl;
                    GetDialogItem (optionsDialog, kPlayThruCheckBox, &
                                   type, &(Handle)control, &box);
                    SetControlValue (control, !GetControlValue (control));
                    break;
            }
        }

        if (err == noErr) {
            GetDialogItem (optionsDialog, kSourceNamesMenu, &
                           type, &(Handle)control, &box);
            inputSource = GetControlValue (control);
            err = SPBSetDeviceInfo (soundInputDevice, siInputSource, &inputSource);

            if (err == noErr) {
                GetDialogItem (optionsDialog, kPlayThruCheckBox, &
                               type, &(Handle)control, &box);
                playThruState = GetControlValue (control);
                if (playThruState == 1)
                    playThruState = 7;
                err = SPBSetDeviceInfo (soundInputDevice, siPlayThruOnOff,
                                        &playThruState);
            }
        }

        DisposeDialog (optionsDialog);
        DisposeMenu (namesMenu);
    }

    return (err);
}


ǪÇÃëºÇÃíçà”ÇΔÉRÉÅÉìÉg

ǢǬLJèqÇ◊ÇÈDZÇΔÇ≈Ç∑Ç™ÅAQuickTime ÇÕÉIÅ[ÉfÉBÉI (çƒê∂ÇΔò^âπ) ÇÇÊÇËä»íPÇ…àµÇ§ÇΩÇflDždžÇÈLJÇÃÇ≈Ç∑ÅBÉAÉvÉäÉPÅ[ÉVÉáÉìÇ≈ïKóvÇΔÇ∑ÇÈò^âπÇ™Ç≤Ç≠ä»íPǻLJÇÃÇ≈džÇÈèÍçáÇÕÅAQuickTime Çégǡǃò^âπÇ∑ÇÈÇÃÇ™ÇÊÇ¢Ç≈ǵÇÂǧÅBQuickTime Ç…ÇÕÅA1 ìxÇÃä»íPÇ»åƒÇ—èoǵÇ≈ÉAÉNÉZÉXÇ≈Ç´ÇÈïWèÄÉÜÅ[ÉUÉCÉìÉ^ÉtÉFÅ[ÉXÅASGSettingsDialog Ç™ópà”Ç≥ÇÍǃǢNjÇ∑ÅBÇ‹ÇΩÅAQuickTime ÇégǶnjÅAÉAÉvÉäÉPÅ[ÉVÉáÉìÇ™ìÆçÏÇ∑ÇÈÉnÅ[ÉhÉEÉFÉAÇÃDZÇΔÇà”éØÇπÇ∏Ç…ÅAä»íPÇ…âπê∫Çò^âπÇ∑ÇÈDZÇΔÇ™Ç≈Ç´Ç‹Ç∑ÅB

óvñÒ

džǻÇΩÇÃÉAÉvÉäÉPÅ[ÉVÉáÉìÇ™Ç∑Ç≈Ç…ÉTÉEÉìÉhì¸óÕÉhÉâÉCÉoÇÃê›íËÉ_ÉCÉAÉçÉOÇÉÜÅ[ÉUÇ…íÒãüǵǃǢÇÈÇÃÇ≈džÇÍÇŒÅAç°âÒÇà PCI ÉTÉEÉìÉhì¸óÕÉhÉâÉCÉoÇÃïœçXÇ™ÅAdžǻÇΩÇ‚ÉÜÅ[ÉUÇ…ãÍí…ÇLJÇΩÇÁÇ∑DZÇΔÇÕdžÇËÇ‹ÇπÇÒÅBǵǩǵÅAÉAÉvÉäÉPÅ[ÉVÉáÉìÇ™ëºÇÃÉ\ÉtÉgÉEÉFÉAÇ…àÀë∂ǵǃÉTÉEÉìÉhì¸óÕÉhÉâÉCÉoÇÃê›íËÇçsǡǃǢÇÈèÍçáÅAç°Ç±ÇªÇ∑Ç◊ǃÇÃÉTÉEÉìÉhê›íËÇé©ï™Ç≈ê≥ǵÇ≠èàóùÇ∑ÇÈÇÊǧDžÉAÉvÉäÉPÅ[ÉVÉáÉìÇÉAÉbÉvÉfÅ[ÉgÇ∑ÇÈéûÇ≈Ç∑ÅB

éQçlï∂å£
TECHNOTE 1108: ÅuÇÊÇ≠ímÇÁÇÍǃǢǻǩǡÇΩÉTÉEÉìÉhÇÃã@î\Åv
TECHNOTE 1048: Some Sound Advice: Getting the Most Out of the Sound Manager
Inside Macintosh: Sound
Inside Macintosh: QuickTime